#include<iostream>
#include<signal.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

// void handle(int signum)
// {
//     std::cout<<"hello signal "<<signum<<std::endl;
//     while(true)
//     {
//         sigset_t pending;
//         sigpending(&pending);
//         for(int i=31;i>=1;i--)
//         {
//             if(sigismember(&pending,i))
//             {
//                 std::cout<<"1";
//             }
//             else
//             {
//                 std::cout<<"0";
//             }
//         }
//         std::cout<<std::endl;
//         sleep(1);
//     }
//     exit(0);
// }

// int main()
// {
//     struct sigaction act,oldact;//sigaction的两个参数
//     act.sa_handler = handle;//注册我们自定义捕捉的方法
//     sigemptyset(&act.sa_mask);
//     sigaddset(&act.sa_mask,3);
//     sigaddset(&act.sa_mask,4);
//     act.sa_flags = 0;

//     sigaction(SIGINT,&act,&oldact);

//     while (true)
//     {
//         std::cout<<"hello world"<<std::endl;
//         sleep(1);
//     }
    
//     return 0;
// }

// volatile int flag = 0;
// void handle(int signu)
// {
//     std::cout<<flag<<"-> 1"<<std::endl;
//     flag=1;
// }
// int main()
// {
//     signal(2,handle);
//     while(!flag);

//     std::cout<<"process exit normal"<<std::endl;
//     return 0;
// }

// void Say(int num)
// {
//     // waitpid(-1,nullptr,0);
//     while (true)
//     {
//         pid_t n = waitpid(-1,nullptr,WNOHANG);//这里用非阻塞轮询
//         //大于0，等待成功
//         if(n==0)//等于0说明子进程没有结束
//         {
//             break;
//         }
//         else if(n<0)
//         {
//             std::cout<<"waitpid error"<<std::endl;
//             break;
//         }
//     }
    
    
//     std::cout<<"father get a signal:"<<num<<std::endl;
// }

int main()
{
    signal(SIGCHLD,SIG_IGN);
    for(int i=0;i<4;i++)//10个子进程
    {
        pid_t id =fork();
        if(id==0)
        {
            sleep(3);
            std::cout<<"I am child,exit"<<std::endl;
            exit(3);
            // if(i<=6) exit(3);
            // else pause();
        }
    }

    while (true)
    {
        std::cout<<"I am father,exit"<<std::endl;
        sleep(1);
    }
    return 0;
}